package com.audaque.springboot.foshanupload.web.servletdemo.controller.forward;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
Web组件之间的跳转:web组件(Servlet/JSP/Filter/Listener),将一个完整的功能由多个web组件配置完成
作用域的作用:   是用来实现在web组件之间数据共享，共享数据放在哪个作用域中就只能从哪个作用域获取
比如在AServlet跳转到BServlet需要共享一个用户名的数据,此时就需要用到作用域
Servlet中的三大作用域:
名称		     类型		                          描述
request		 HttpServletRequest	  一次请求对象,每次刷新访问都是一次新的请求
session		 HttpSession		  一次会话对象,浏览器打开开始,关闭的时候销毁
application	 ServletContext		  当前应用对象,在服务器启动的时候创建,在关闭服务器的时候销毁

操作作用域：
设置共享数据
void setAttribute(String name, Object object)
获取共享数据
Object getAttribute(String name)
修改共享数据
重新设置一个同名的共享数据
删除共享数据
void removeAttribute(String name)
 * */
@WebServlet("/forward/a")
public class AServlet extends HttpServlet{
	private static final long serialVersionUID = 4993112101987329614L;

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("---before---a");
		PrintWriter out=resp.getWriter();
		out.print("---before---a");

		//跳转
		//web组件的跳转方式:
		//1.请求转发(forward)：只能访问当前项目的资源，相当于在地址栏固定添加了当前项目的路径（主机地址/上下文路径）再拼接资源路径
		//请求转发的特点:1.整个只有一次请求
		RequestDispatcher rd=req.getRequestDispatcher("/forward/b");//参数:path,指定要跳转到的资源路径
		//http://localhost/forward_redirect_scope_jsp/forward/a?name=123
		//请求转发的特点:2.既然是一次请求,那么可以在这之间的web组件中共享数据
		System.out.println("a---"+req.getParameter("name"));
		//请求转发的特点:4.在请求转发中可以访问WEB-INF中的资源
		//RequestDispatcher rd=req.getRequestDispatcher("/WEB-INF/login.html");//参数:path,指定要跳转到的资源路径
		//请求转发的特点:5.请求转发不能跨域访问
		//RequestDispatcher rd=req.getRequestDispatcher("https://www.baidu.com");//参数:path,指定要跳转到的资源路径
		rd.forward(req, resp);//请求转发

		//请求转发的特点:6.跳转前后地址栏中的地址没有改变

		System.out.println("---after---a");
		out.print("---after---a");
		System.out.println("-----------------------------");

	}



}
